/*
******************************************************************************************************* 
**  Copyright (C) 2019, 苏州检易生物科技有限公司 
**  All rights reserved. 
** 
**  FileName:       	fetp.h
**  Description:	
**  Author:        	 
**  Version				v0.1
**  Date:           	2019-11-26
**	Function List： 
**  History:         
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*                                              	防止重复包含
*********************************************************************************************************
*/

#ifndef _CAN_CALLLBACK_H_
#define _CAN_CALLLBACK_H_
/*
*********************************************************************************************************
*                                              	调试开关
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              	头文件
*********************************************************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

/*
*********************************************************************************************************
*                                              	宏定义
*********************************************************************************************************
*/



/*
*********************************************************************************************************
*                                              枚举和结构体类型定义
*********************************************************************************************************
*/
/*CAN 节点的类型不能从ID或者data中判断出来 
节点ID需要提前绑定设备类型，确定改用那个设备的回调函数*/
typedef void (*pfn_can_pct_callback)(uint16_t can_id,uint8_t dlc,uint8_t* p_data);

/*电机和其他设备使用不同硬件can*/
typedef enum{
	CAN_BUS_MOTOR,
	CAN_BUS_PERIPH,
}can_bus_t;

typedef struct CAN_PCT_PFN_NODE{
	uint16_t can_id;
	can_bus_t bus_type;
	pfn_can_pct_callback tx_callback;
	pfn_can_pct_callback rx_callback;
	struct CAN_PCT_PFN_NODE* next;
}can_pct_pfn_node_t;

typedef struct CAN_PCT_CALLBACK{
	can_pct_pfn_node_t* sys_fnc_callback;
	can_pct_pfn_node_t* p_head;
}can_pct_callback_t;

/*
*********************************************************************************************************
*                                              	全局变量声明
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                              	函数声明
*********************************************************************************************************
*/
void can_pct_regist(can_bus_t type,uint16_t node_id,pfn_can_pct_callback tx_callback,pfn_can_pct_callback rx_callback);
void can_pct_tx_callback(can_bus_t type,uint16_t can_id,uint8_t dlc,uint8_t* p_data);
void can_pct_rx_callback(can_bus_t type,uint16_t can_id,uint8_t dlc,uint8_t* p_data);
#endif
